home *** CD-ROM | disk | FTP | other *** search
- // DO NOT import this into the global namespace, but instead
- // import it into your own namespace wrapper
-
- var EXPORTED_SYMBOLS = ["BuiltinExtractors"];
-
- Components.utils.import("resource://glydo/application/extractors/DefaultTextExtractor.jsm");
-
- BuiltinExtractors = {
- "com.glydo.extractors.builtins.all": function(sandbox,options,callbacks) {
- var n = options.candidates.length;
- var ignoreFailures = options.ignoreFailures || false;
- var completed = 0;
- var failed = false;
-
- var onSubTaskDone = function() {
- ++completed;
- if (completed == n && (ignoreFailures || !failed)) {
- callbacks.notifyTaskDone();
- }
- };
-
- var onSubTaskFailed = function(reason) {
- if (ignoreFailures) {
- onSubTaskDone();
- } else {
- ++completed;
- failed = true;
- callbacks.notifyTaskFailed(reason);
- }
- };
-
- for (var i = 0; i < n; ++i) {
- var c = options.candidates[i];
- var subId;
- var subOptions = null;
- if (typeof c == "string") {
- subId = c;
- } else {
- subId = c["extractor"];
- subOptions = c["options"];
- }
- sandbox.importScript(subId);
- var subCallbacks = {};
- subCallbacks["notifyTaskDone"] = onSubTaskDone;
- subCallbacks["notifyTaskFailed"] = onSubTaskFailed;
- subCallbacks["notifyContextItemExtracted"] = callbacks.notifyContextItemExtracted;
- try {
- sandbox.invoke(subId,subOptions,subCallbacks);
- } catch (ex) {
- onSubTaskFailed(typeof(ex) == "string" ? ex : (ex.name + ": " + ex.message));
- }
- }
- },
-
- "com.glydo.extractors.builtins.first": function(sandbox,options,callbacks) {
- var n = options.candidates.length;
- var ignoreFailures = options.ignoreFailures || false;
- var cur = 0;
- var found = false;
-
- var onSubTaskDone = function() {
- ++cur;
- if (cur == n || found) {
- callbacks.notifyTaskDone();
- return;
- }
- next();
- };
-
- var onSubTaskFailed = function(reason) {
- if (ignoreFailures) {
- onSubTaskDone();
- } else {
- callbacks.notifyTaskFailed(reason);
- }
- };
-
- var onSubTaskContextItem = function(item) {
- found = true;
- callbacks.notifyContextItemExtracted(item);
- };
-
- var subCallbacks = {};
- subCallbacks["notifyTaskDone"] = onSubTaskDone;
- subCallbacks["notifyTaskFailed"] = onSubTaskFailed;
- subCallbacks["notifyContextItemExtracted"] = onSubTaskContextItem;
-
- var next = function() {
- var c = options.candidates[cur];
- var subId;
- var subOptions = null;
- if (typeof c == "string") {
- subId = c;
- } else {
- subId = c["extractor"];
- subOptions = c["options"];
- }
- sandbox.importScript(subId);
- try {
- sandbox.invoke(subId,subOptions,subCallbacks);
- } catch (ex) {
- onSubTaskFailed(typeof(ex) == "string" ? ex : (ex.name + ": " + ex.message));
- }
-
- };
-
- next();
- },
-
- "com.glydo.extractors.builtins.text": function(sandbox,options,callbacks) {
- var task = new DefaultTextExtractor.ExtractionTask(sandbox.document,sandbox.document.documentURI,options,callbacks);
- task.execute();
- },
-
- "com.glydo.extractors.abort": function(sandbox,options,callbacks) {
- callbacks.notifyContextItemExtracted("abort_context_extraction");
- callbacks.notifyTaskDone();
- }
-
- };
-
-